﻿/*----------------------------------------------------------------
// Copyright (C) 2016 上海，巨人
//
// 模块名：mailbox
// 创建者：Macro Gu
// 修改者列表：
// 创建日期：2016.1.5
// 模块描述：对服务器的发送缓冲区的封装： mailbox
//----------------------------------------------------------------*/
#include "mailbox.h"

#include "rpc/rpc_req_data.h"  // for CRpcReqData

#include <google/protobuf/message.h>  // for Message

// Sequence id generator.
static uint64_t s_uIdGenerator = 0;
static uint64_t max_voice_num = 60000;// voice 的客户端断开的频率较高，重用编号，保持最大10000个连接

///////////////////////////////////////////////////////////////////////////////
CMailBox::CMailBox() :
    m_uId(++s_uIdGenerator)
{
	if (s_uIdGenerator > max_voice_num)
	{
		s_uIdGenerator = s_uIdGenerator - max_voice_num;
	}
}

CMailBox::~CMailBox()
{
}

void CMailBox::PushRpcReq(
	const std::string& sServiceName,
	const std::string& sMethod,
	const google::protobuf::Message& request,
	const Callback& cb)
{
	RpcDataSptr pRpc = std::make_shared<CRpcReqData>(
		sServiceName, sMethod, request.SerializeAsString(), cb);
	m_vOutgoingRpc.emplace_back(pRpc);
}

void CMailBox::PushRpcReq(
	const std::string& sServiceName,
	const std::string& sMethod,
	const std::string& sRequest,
	const Callback& cb)
{
	RpcDataSptr pRpc = std::make_shared<CRpcReqData>(
		sServiceName, sMethod, sRequest, cb);
	m_vOutgoingRpc.emplace_back(pRpc);
}
